React์ Fiber ์ํคํ ์ฒ์ ๋ํ ์ฌ์ธต ๋ถ์์ผ๋ก, reconciliation ํ๋ก์ธ์ค, ์ด์ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
React Fiber ์ํคํ ์ฒ: Reconciliation ํ๋ก์ธ์ค ์ดํด
React๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ์ ์ ์ธ์ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ํตํด ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ๋ช ์ ์ผ์ผ์ผฐ์ต๋๋ค. React ํจ์จ์ฑ์ ํต์ฌ์ reconciliation ํ๋ก์ธ์ค์ ๋๋ค. reconciliation์ React๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๊ธฐ ์ํด ์ค์ DOM์ ์ ๋ฐ์ดํธํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ์๋นํ ๋ฐ์ ์ ๊ฑฐ์ณ Fiber ์ํคํ ์ฒ๋ก ์ ์ ์ ์ฐ์์ต๋๋ค. ์ด ๊ธฐ์ฌ์์๋ React Fiber์ reconciliation์ ๋ฏธ์น๋ ์ํฅ์ ๋ํ ํฌ๊ด์ ์ธ ์ดํด๋ฅผ ์ ๊ณตํฉ๋๋ค.
Reconciliation์ด๋ ๋ฌด์์ ๋๊น?
Reconciliation์ React๊ฐ ์ด์ ๊ฐ์ DOM๊ณผ ์ ๊ฐ์ DOM์ ๋น๊ตํ๊ณ ์ค์ DOM์ ์ ๋ฐ์ดํธํ๋ ๋ฐ ํ์ํ ์ต์ ๋ณ๊ฒฝ ์ฌํญ ์งํฉ์ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๊ฐ์ DOM์ UI์ ๋ฉ๋ชจ๋ฆฌ ๋ด ํํ์ ๋๋ค. ์ปดํฌ๋ํธ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด React๋ ์ ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค. React๋ ๋๋ฆฐ ํ๋ก์ธ์ค์ธ ์ค์ DOM์ ์ง์ ์กฐ์ํ๋ ๋์ ์ ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ์ด์ ๊ฐ์ DOM ํธ๋ฆฌ์ ๋น๊ตํ์ฌ ์ฐจ์ด์ ์ ์๋ณํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ฅผ diffing์ด๋ผ๊ณ ํฉ๋๋ค.
reconciliation ํ๋ก์ธ์ค๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ฐ์ ์ ๋ฐ๋ฆ ๋๋ค.
- ๋ค๋ฅธ ์ ํ์ ์์๋ ๋ค๋ฅธ ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ฐ๋ฐ์๋
key
prop์ ์ฌ์ฉํ์ฌ ์๋ก ๋ค๋ฅธ ๋ ๋๋ง์์ ์์ ์ ์ผ ์ ์๋ ํ์ ์์๋ฅผ ํํธํ ์ ์์ต๋๋ค.
๊ธฐ์กด Reconciliation (Fiber ์ด์ )
React์ ์ด๊ธฐ ๊ตฌํ์์ reconciliation ํ๋ก์ธ์ค๋ ๋๊ธฐ์์ด๊ณ ๋๋ ์ ์์์ต๋๋ค. ์ฆ, React๊ฐ ๊ฐ์ DOM์ ๋น๊ตํ๊ณ ์ค์ DOM์ ์ ๋ฐ์ดํธํ๋ ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ฉด ์ค๋จํ ์ ์์์ต๋๋ค. ์ด๋ก ์ธํด ํนํ ํฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ๊ฐ ์๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ตํ์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ํ๋ฉ๋๋ค. ์ด๋ฅผ ์ข ์ข "jank" ๋ฌธ์ ๋ผ๊ณ ํฉ๋๋ค.
์ ํ ์นดํ๋ก๊ทธ๋ฅผ ํ์ํ๋ ๋ณต์กํ ์ ์ ์๊ฑฐ๋ ์น์ฌ์ดํธ๋ฅผ ์์ํด ๋ณด์ญ์์ค. ์ฌ์ฉ์๊ฐ ํํฐ์ ์ํธ ์์ฉํ์ฌ ์นดํ๋ก๊ทธ์ ์ฌ ๋ ๋๋ง์ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒฝ์ฐ ๋๊ธฐ์ reconciliation ํ๋ก์ธ์ค๋ ๊ธฐ๋ณธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ ์ ์ฒด ์นดํ๋ก๊ทธ๊ฐ ๋ค์ ๋ ๋๋ง๋ ๋๊น์ง UI๊ฐ ์๋ตํ์ง ์์ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๋ช ์ด๊ฐ ๊ฑธ๋ฆด ์ ์์ผ๋ฉฐ ์ฌ์ฉ์์๊ฒ ๋ถ๋ง์ ์ผ๊ธฐํ ์ ์์ต๋๋ค.
React Fiber ์๊ฐ
React Fiber๋ React 16์ ๋์ ๋ React reconciliation ์๊ณ ๋ฆฌ์ฆ์ ์์ ํ ์ฌ์์ฑ์ ๋๋ค. ์ฃผ์ ๋ชฉํ๋ ํนํ ๋ณต์กํ ์๋๋ฆฌ์ค์์ React ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ๊ณผ ์ธ์ง๋ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๊ฒ์ ๋๋ค. Fiber๋ reconciliation ํ๋ก์ธ์ค๋ฅผ ๋ ์๊ณ ์ค๋จ ๊ฐ๋ฅํ ์์ ๋จ์๋ก ๋ถํดํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํฉ๋๋ค.
React Fiber์ ํต์ฌ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Fibers: fiber๋ ์์ ๋จ์๋ฅผ ๋ํ๋ด๋ JavaScript ๊ฐ์ฒด์ ๋๋ค. ์ปดํฌ๋ํธ, ํด๋น ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ ํฉ๋๋ค. ๊ฐ React ์ปดํฌ๋ํธ์๋ ํด๋น fiber๊ฐ ์์ต๋๋ค.
- WorkLoop: ์์ ๋ฃจํ๋ fiber ํธ๋ฆฌ๋ฅผ ๋ฐ๋ณตํ๊ณ ๊ฐ fiber์ ํ์ํ ์์ ์ ์ํํ๋ ๋ฃจํ์ ๋๋ค.
- Scheduling: ์ค์ผ์ค๋ฌ๋ ์ฐ์ ์์์ ๋ฐ๋ผ ์์ ๋จ์๋ฅผ ์์, ์ผ์ ์ค์ง, ์ฌ๊ฐ ๋๋ ์ค๋จํ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
Fiber ์ํคํ ์ฒ์ ์ด์
Fiber ์ํคํ ์ฒ๋ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- Interruptible Reconciliation: Fiber๋ฅผ ์ฌ์ฉํ๋ฉด React๊ฐ reconciliation ํ๋ก์ธ์ค๋ฅผ ์ผ์ ์ค์งํ๊ณ ์ฌ๊ฐํ ์ ์์ผ๋ฏ๋ก ์ฅ๊ธฐ ์คํ ์์ ์ด ๊ธฐ๋ณธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ณต์กํ ์ ๋ฐ์ดํธ ์ค์๋ UI๊ฐ ์๋ต์ฑ์ ์ ์งํฉ๋๋ค.
- Priority-Based Updates: Fiber๋ฅผ ์ฌ์ฉํ๋ฉด React๊ฐ ๋ค์ํ ์ ํ์ ์ ๋ฐ์ดํธ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ดํ ๋๋ ํด๋ฆญ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๋ณด๋ค ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ฅ ์ค์ํ ์ ๋ฐ์ดํธ๊ฐ ๋จผ์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- Asynchronous Rendering: Fiber๋ฅผ ์ฌ์ฉํ๋ฉด React๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋ ๋๋ง์ ์ํํ ์ ์์ต๋๋ค. ์ฆ, React๋ ์ปดํฌ๋ํธ ๋ ๋๋ง์ ์์ํ ๋ค์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ฉ์ ์ ๋ ฅ ๋๋ ์ ๋๋ฉ์ด์ ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ์ผ์ ์ค์งํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ๊ณผ ์๋ต์ฑ์ด ํฅ์๋ฉ๋๋ค.
- Improved Error Handling: Fiber๋ reconciliation ํ๋ก์ธ์ค ์ค์ ๋ ๋์ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ ๋๋ง ์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด React๋ ๋ ์ ์์ ์ผ๋ก ๋ณต๊ตฌํ๊ณ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ถฉ๋ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
ํ์ ๋ฌธ์ ํธ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ๋ คํด ๋ณด์ญ์์ค. Fiber๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ง๋ ํธ์ง ๋ด์ฉ์ ๋ค์ํ ์ฐ์ ์์๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ์ฌ ์ฌ์ฉ์์ ์ค์๊ฐ ์ ๋ ฅ์ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๋ณด์ฅํ๋ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ์ป์ต๋๋ค. ๋ค๋ฅธ ์ฌ์ฉ์์ ์ ๋ฐ์ดํธ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋ ์ ์ฅ์ ํ์ฑ ์ฌ์ฉ์์ ๊ฒฝํ์ ๋ํ ์ค๋จ์ ์ต์ํํ๋ฉด์ ๋ฎ์ ์ฐ์ ์์๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Fiber ๊ตฌ์กฐ ์ดํด
๊ฐ React ์ปดํฌ๋ํธ๋ Fiber ๋ ธ๋๋ก ํ์๋ฉ๋๋ค. Fiber ๋ ธ๋๋ ์ปดํฌ๋ํธ ์ ํ, props, ์ํ ๋ฐ ํธ๋ฆฌ์์ ๋ค๋ฅธ Fiber ๋ ธ๋์์ ๊ด๊ณ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ ํฉ๋๋ค. ๋ค์์ Fiber ๋ ธ๋์ ๋ช ๊ฐ์ง ์ค์ํ ์์ฑ์ ๋๋ค.
- type: ์ปดํฌ๋ํธ์ ์ ํ(์: ํจ์ ์ปดํฌ๋ํธ, ํด๋์ค ์ปดํฌ๋ํธ, DOM ์์).
- key: ์ปดํฌ๋ํธ์ ์ ๋ฌ๋ key prop.
- props: ์ปดํฌ๋ํธ์ ์ ๋ฌ๋ props.
- stateNode: ์ปดํฌ๋ํธ์ ์ธ์คํด์ค(ํด๋์ค ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ) ๋๋ null(ํจ์ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ).
- child: ์ฒซ ๋ฒ์งธ ์์ Fiber ๋ ธ๋์ ๋ํ ํฌ์ธํฐ.
- sibling: ๋ค์ ํ์ Fiber ๋ ธ๋์ ๋ํ ํฌ์ธํฐ.
- return: ๋ถ๋ชจ Fiber ๋ ธ๋์ ๋ํ ํฌ์ธํฐ.
- alternate: ์ปดํฌ๋ํธ์ ์ด์ ์ํ๋ฅผ ๋ํ๋ด๋ Fiber ๋ ธ๋์ ๋ํ ํฌ์ธํฐ.
- effectTag: DOM์์ ์ํํด์ผ ํ๋ ์ ๋ฐ์ดํธ ์ ํ์ ๋ํ๋ด๋ ํ๋๊ทธ.
alternate
์์ฑ์ ํนํ ์ค์ํฉ๋๋ค. ์ด๋ฅผ ํตํด React๋ ์ปดํฌ๋ํธ์ ์ด์ ๋ฐ ํ์ฌ ์ํ๋ฅผ ์ถ์ ํ ์ ์์ต๋๋ค. reconciliation ํ๋ก์ธ์ค ์ค์ React๋ ํ์ฌ Fiber ๋
ธ๋๋ฅผ ํด๋น alternate
์ ๋น๊ตํ์ฌ DOM์ ์ ์ฉํด์ผ ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒฐ์ ํฉ๋๋ค.
WorkLoop ์๊ณ ๋ฆฌ์ฆ
์์ ๋ฃจํ๋ Fiber ์ํคํ ์ฒ์ ํต์ฌ์ ๋๋ค. fiber ํธ๋ฆฌ๋ฅผ ํธ๋๋ฒ์คํ๊ณ ๊ฐ fiber์ ํ์ํ ์์ ์ ์ํํ๋ ์ญํ ์ ํฉ๋๋ค. ์์ ๋ฃจํ๋ fiber๋ฅผ ํ ๋ฒ์ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ์ฌ๊ท ํจ์๋ก ๊ตฌํ๋ฉ๋๋ค.
์์ ๋ฃจํ๋ ๋ ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- The Render Phase: ๋ ๋๋ง ๋จ๊ณ์์ React๋ fiber ํธ๋ฆฌ๋ฅผ ํธ๋๋ฒ์คํ๊ณ DOM์ ์ ์ฉํด์ผ ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒฐ์ ํฉ๋๋ค. ์ด ๋จ๊ณ๋ ์ค๋จ ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, React๋ ์ธ์ ๋ ์ง ์ผ์ ์ค์งํ๊ณ ์ฌ๊ฐํ ์ ์์ต๋๋ค.
- The Commit Phase: ์ปค๋ฐ ๋จ๊ณ์์ React๋ DOM์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํฉ๋๋ค. ์ด ๋จ๊ณ๋ ์ค๋จํ ์ ์์ต๋๋ค. ์ฆ, React๋ ์์ํ๋ฉด ์๋ฃํด์ผ ํฉ๋๋ค.
The Render Phase in Detail
๋ ๋๋ง ๋จ๊ณ๋ ๋ ๊ฐ์ ํ์ ๋จ๊ณ๋ก ๋ ๋๋ ์ ์์ต๋๋ค.
- beginWork:
beginWork
ํจ์๋ ํ์ฌ Fiber ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ Fiber ๋ ธ๋๋ฅผ ๋ง๋๋ ์ญํ ์ ํฉ๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ณ , ๊ทธ๋ ๋ค๋ฉด ์์์ ๋ํ ์ Fiber ๋ ธ๋๋ฅผ ๋ง๋ญ๋๋ค. - completeWork:
completeWork
ํจ์๋ ์์์ด ์ฒ๋ฆฌ๋ ํ ํ์ฌ Fiber ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. DOM์ ์ ๋ฐ์ดํธํ๊ณ ์ปดํฌ๋ํธ์ ๋ ์ด์์์ ๊ณ์ฐํฉ๋๋ค.
beginWork
ํจ์๋ ๋ค์ ์์
์ ์ํํฉ๋๋ค.
- ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋์ง ํ์ธํฉ๋๋ค.
- ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ ๊ฒฝ์ฐ ์ props์ ์ํ๋ฅผ ์ด์ props์ ์ํ์ ๋น๊ตํ์ฌ ์ ์ฉํด์ผ ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒฐ์ ํฉ๋๋ค.
- ์ปดํฌ๋ํธ ์์์ ๋ํ ์ Fiber ๋ ธ๋๋ฅผ ๋ง๋ญ๋๋ค.
- Fiber ๋
ธ๋์์
effectTag
์์ฑ์ ์ค์ ํ์ฌ DOM์์ ์ํํด์ผ ํ๋ ์ ๋ฐ์ดํธ ์ ํ์ ๋ํ๋ ๋๋ค.
completeWork
ํจ์๋ ๋ค์ ์์
์ ์ํํฉ๋๋ค.
beginWork
ํจ์ ์ค์ ๊ฒฐ์ ๋ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก DOM์ ์ ๋ฐ์ดํธํฉ๋๋ค.- ์ปดํฌ๋ํธ์ ๋ ์ด์์์ ๊ณ์ฐํฉ๋๋ค.
- ์ปค๋ฐ ๋จ๊ณ ํ์ ์ํํด์ผ ํ๋ side effect๋ฅผ ์์งํฉ๋๋ค.
The Commit Phase in Detail
์ปค๋ฐ ๋จ๊ณ๋ DOM์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด ๋จ๊ณ๋ ์ค๋จํ ์ ์์ต๋๋ค. ์ฆ, React๋ ์์ํ๋ฉด ์๋ฃํด์ผ ํฉ๋๋ค. ์ปค๋ฐ ๋จ๊ณ๋ ์ธ ๊ฐ์ ํ์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- beforeMutation: ์ด ๋จ๊ณ๋ DOM์ด ๋ณ๊ฒฝ๋๊ธฐ ์ ์ ์คํ๋ฉ๋๋ค. DOM ์ ๋ฐ์ดํธ ์ค๋น์ ๊ฐ์ ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- mutation: ์ด ๋จ๊ณ๋ ์ค์ DOM ๋ณ๊ฒฝ์ด ์ํ๋๋ ๋จ๊ณ์
๋๋ค. React๋ Fiber ๋
ธ๋์
effectTag
์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก DOM์ ์ ๋ฐ์ดํธํฉ๋๋ค. - layout: ์ด ๋จ๊ณ๋ DOM์ด ๋ณ๊ฒฝ๋ ํ์ ์คํ๋ฉ๋๋ค. ์ปดํฌ๋ํธ ๋ ์ด์์ ์ ๋ฐ์ดํธ ๋ฐ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋ ์คํ๊ณผ ๊ฐ์ ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ค์ ์์ ๋ฐ ์ฝ๋ ์ค๋ํซ
๊ฐ๋จํ ์์ ๋ก Fiber reconciliation ํ๋ก์ธ์ค๋ฅผ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค. ํญ๋ชฉ ๋ชฉ๋ก์ ํ์ํ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค.
```javascript function ItemList({ items }) { return (-
{items.map(item => (
- {item.name} ))}
items
prop์ด ๋ณ๊ฒฝ๋๋ฉด React๋ ๋ชฉ๋ก์ reconciliationํ๊ณ DOM์ ์ ์ ํ๊ฒ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค. Fiber๋ ์ด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํฉ๋๋ค.
- Render Phase:
beginWork
ํจ์๋ ์items
๋ฐฐ์ด์ ์ด์ items
๋ฐฐ์ด๊ณผ ๋น๊ตํฉ๋๋ค. ์ถ๊ฐ, ์ ๊ฑฐ ๋๋ ์ ๋ฐ์ดํธ๋ ํญ๋ชฉ์ ์๋ณํฉ๋๋ค. - ์ถ๊ฐ๋ ํญ๋ชฉ์ ๋ํ ์ Fiber ๋
ธ๋๊ฐ ์์ฑ๋๊ณ
effectTag
๊ฐ ์ค์ ๋์ด ์ด๋ฌํ ํญ๋ชฉ์ DOM์ ์ฝ์ ํด์ผ ํจ์ ๋ํ๋ ๋๋ค. - ์ ๊ฑฐ๋ ํญ๋ชฉ์ ๋ํ Fiber ๋ ธ๋๋ ์ญ์ ๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค.
- ์ ๋ฐ์ดํธ๋ ํญ๋ชฉ์ ๋ํ Fiber ๋ ธ๋๋ ์ ๋ฐ์ดํฐ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
- Commit Phase: ๊ทธ๋ฐ ๋ค์
commit
๋จ๊ณ๋ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์ DOM์ ์ ์ฉํฉ๋๋ค. ์ถ๊ฐ๋ ํญ๋ชฉ์ด ์ฝ์ ๋๊ณ , ์ ๊ฑฐ๋ ํญ๋ชฉ์ด ์ญ์ ๋๊ณ , ์ ๋ฐ์ดํธ๋ ํญ๋ชฉ์ด ์์ ๋ฉ๋๋ค.
key
prop์ ์ฌ์ฉ์ ํจ์จ์ ์ธ reconciliation์ ๋งค์ฐ ์ค์ํฉ๋๋ค. key
prop์ด ์์ผ๋ฉด React๋ items
๋ฐฐ์ด์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ ์ฒด ๋ชฉ๋ก์ ๋ค์ ๋ ๋๋งํด์ผ ํฉ๋๋ค. key
prop์ ์ฌ์ฉํ๋ฉด React๋ ์ถ๊ฐ, ์ ๊ฑฐ ๋๋ ์
๋ฐ์ดํธ๋ ํญ๋ชฉ์ ๋น ๋ฅด๊ฒ ์๋ณํ๊ณ ํด๋น ํญ๋ชฉ๋ง ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ผํ ์นดํธ์์ ํญ๋ชฉ์ ์์๊ฐ ๋ณ๊ฒฝ๋๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํด ๋ณด์ญ์์ค. ๊ฐ ํญ๋ชฉ์ ๊ณ ์ ํ key
(์: ์ ํ ID)๊ฐ ์๋ ๊ฒฝ์ฐ React๋ ์ ์ฒด๋ฅผ ๋ค์ ๋ ๋๋งํ์ง ์๊ณ ๋ DOM์์ ํญ๋ชฉ์ ์์๋ฅผ ํจ์จ์ ์ผ๋ก ๋ค์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํนํ ํฐ ๋ชฉ๋ก์ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
Scheduling ๋ฐ Prioritization
Fiber์ ์ฃผ์ ์ด์ ์ค ํ๋๋ ์ ๋ฐ์ดํธ๋ฅผ ์์ฝํ๊ณ ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. React๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ ์์์ ๋ฐ๋ผ ์์ ๋จ์๋ฅผ ์์, ์ผ์ ์ค์ง, ์ฌ๊ฐ ๋๋ ์ค๋จํ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด React๋ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ๊ณ ๋ณต์กํ ์ ๋ฐ์ดํธ ์ค์๋ UI๊ฐ ์๋ต์ฑ์ ์ ์งํ๋๋ก ํ ์ ์์ต๋๋ค.
React๋ ๋ค์ํ ์ฐ์ ์์๋ก ์ ๋ฐ์ดํธ๋ฅผ ์์ฝํ๊ธฐ ์ํ ๋ช ๊ฐ์ง API๋ฅผ ์ ๊ณตํฉ๋๋ค.
React.render
: ๊ธฐ๋ณธ ์ฐ์ ์์๋ก ์ ๋ฐ์ดํธ๋ฅผ ์์ฝํฉ๋๋ค.ReactDOM.unstable_deferredUpdates
: ๋ฎ์ ์ฐ์ ์์๋ก ์ ๋ฐ์ดํธ๋ฅผ ์์ฝํฉ๋๋ค.ReactDOM.unstable_runWithPriority
: ์ ๋ฐ์ดํธ์ ์ฐ์ ์์๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ReactDOM.unstable_deferredUpdates
๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ ์ถ์ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฐ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ค์ํ์ง ์์ ์
๋ฐ์ดํธ๋ฅผ ์์ฝํ ์ ์์ต๋๋ค.
Error Handling with Fiber
Fiber๋ reconciliation ํ๋ก์ธ์ค ์ค์ ํฅ์๋ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ ๋๋ง ์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด React๋ ์ค๋ฅ๋ฅผ catchํ๊ณ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ถฉ๋ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. React๋ ์ค๋ฅ ๊ฒฝ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ์ ์ด๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์ค๋ฅ ๊ฒฝ๊ณ๋ ํ์ ์ปดํฌ๋ํธ ํธ๋ฆฌ์์ JavaScript ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋ชจ๋ ์์น์์ ์ค๋ฅ๋ฅผ catchํ๊ณ ์ค๋ฅ๋ฅผ ๊ธฐ๋กํ๊ณ ์ถฉ๋๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ ๋์ ๋์ฒด UI๋ฅผ ํ์ํ๋ ์ปดํฌ๋ํธ์ ๋๋ค. ์ค๋ฅ ๊ฒฝ๊ณ๋ ๋ ๋๋ง ์ค, ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋์์ ๋ฐ ์๋ ์ ์ฒด ํธ๋ฆฌ์ ์์ฑ์์์ ์ค๋ฅ๋ฅผ catchํฉ๋๋ค.
```javascript class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error) { // Update state so the next render will show the fallback UI. return { hasError: true }; } componentDidCatch(error, errorInfo) { // You can also log the error to an error reporting service logErrorToMyService(error, errorInfo); } render() { if (this.state.hasError) { // You can render any custom fallback UI returnSomething went wrong.
; } return this.props.children; } } ```์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ ์ปดํฌ๋ํธ๋ฅผ ๋ํํ๋ ๋ฐ ์ค๋ฅ ๊ฒฝ๊ณ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ถ ์ปดํฌ๋ํธ๊ฐ ์คํจํ๋๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
```javascriptDebugging Fiber
Fiber๋ฅผ ์ฌ์ฉํ๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ง๋ง ๋์์ด ๋ ์ ์๋ ๋ช ๊ฐ์ง ๋๊ตฌ์ ๊ธฐ์ ์ด ์์ต๋๋ค. React DevTools ๋ธ๋ผ์ฐ์ ํ์ฅ์ ์ปดํฌ๋ํธ ํธ๋ฆฌ ๊ฒ์ฌ, ์ฑ๋ฅ ํ๋กํ์ผ๋ง ๋ฐ ์ค๋ฅ ๋๋ฒ๊น ์ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
React Profiler๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๊ธฐ๋กํ๊ณ ๋ณ๋ชฉ ํ์์ ์๋ณํ ์ ์์ต๋๋ค. Profiler๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋งํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํ์ธํ๊ณ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
React DevTools๋ ๊ฐ ์ปดํฌ๋ํธ์ props, ์ํ ๋ฐ Fiber ๋ ธ๋๋ฅผ ๊ฒ์ฌํ ์ ์๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ ๋ณด๊ธฐ๋ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ๊ฐ ๊ตฌ์ฑ๋๋ ๋ฐฉ์๊ณผ reconciliation ํ๋ก์ธ์ค๊ฐ ์๋ํ๋ ๋ฐฉ์์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
React Fiber ์ํคํ ์ฒ๋ ๊ธฐ์กด reconciliation ํ๋ก์ธ์ค์ ๋นํด ์๋นํ ๊ฐ์ ์ ๋ํ๋ ๋๋ค. Fiber๋ reconciliation ํ๋ก์ธ์ค๋ฅผ ๋ ์๊ณ ์ค๋จ ๊ฐ๋ฅํ ์์ ๋จ์๋ก ๋ถํดํ์ฌ React๊ฐ ํนํ ๋ณต์กํ ์๋๋ฆฌ์ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ๊ณผ ์ธ์ง๋ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋๋ก ํฉ๋๋ค.
Fibers, ์์ ๋ฃจํ ๋ฐ ์ค์ผ์ค๋ง๊ณผ ๊ฐ์ Fiber์ ํต์ฌ ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ ๊ณ ์ฑ๋ฅ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. Fiber์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ ์๋ต์ฑ์ด ๋ฐ์ด๋๊ณ ๋ณต์๋ ฅ์ด ๋ฐ์ด๋๋ฉฐ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ UI๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
React๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ Fiber๋ ์ํคํ ์ฒ์ ๊ธฐ๋ณธ ๋ถ๋ถ์ผ๋ก ์ ์ง๋ฉ๋๋ค. Fiber์ ์ต์ ๊ฐ๋ฐ ์ฌํญ์ ์ต์ ์ํ๋ก ์ ์งํ๋ฉด React ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๊ณตํ๋ ์ฑ๋ฅ ์ด์ ์ ์ต๋ํ ํ์ฉํ ์ ์์ต๋๋ค.
๋ค์์ ๋ช ๊ฐ์ง ์ฃผ์ ์ฌํญ์ ๋๋ค.
- React Fiber๋ React reconciliation ์๊ณ ๋ฆฌ์ฆ์ ์์ ํ ์ฌ์์ฑ์ ๋๋ค.
- Fiber๋ฅผ ์ฌ์ฉํ๋ฉด React๊ฐ reconciliation ํ๋ก์ธ์ค๋ฅผ ์ผ์ ์ค์งํ๊ณ ์ฌ๊ฐํ ์ ์์ผ๋ฏ๋ก ์ฅ๊ธฐ ์คํ ์์ ์ด ๊ธฐ๋ณธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- Fiber๋ฅผ ์ฌ์ฉํ๋ฉด React๊ฐ ๋ค์ํ ์ ํ์ ์ ๋ฐ์ดํธ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
- Fiber๋ reconciliation ํ๋ก์ธ์ค ์ค์ ๋ ๋์ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
key
prop์ ํจ์จ์ ์ธ reconciliation์ ๋งค์ฐ ์ค์ํฉ๋๋ค.- React DevTools ๋ธ๋ผ์ฐ์ ํ์ฅ์ Fiber ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
React Fiber๋ฅผ ์์ฉํ๊ณ ๊ทธ ์์น์ ์ดํดํจ์ผ๋ก์จ ์ ์ธ๊ณ์ ๊ฐ๋ฐ์๋ ์์น๋ ํ๋ก์ ํธ์ ๋ณต์ก์ฑ์ ๊ด๊ณ์์ด ๋ ๋์ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ์นํ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.